import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @description： Routing之订阅模式 direct直连
 * 在Fanout模式中，一条消息会被所有订阅的队列都消费，但是在某些场景下，我们希望不同的消息被不同的队列消费，这时就要用到Direct类型的Exchange
 * 在Direct模型下
 * 1.队列和交换机绑定，不能是任意绑定了，而是要制定一个RoutingKey（路由Key）
 * 2.消息在发送方向Exchange发送消息时 也必须指定消息的RoutingKey
 * 3.Exchange不在吧消息交给每一个绑定的队列，而是根据消息的Routing Key进行判断，只有队列的RoutingKey与消息的RoutingKey 完全一致，才会接受到消息
 *
 * @Author MRyan
 * @Date 2020/11/9 15:48
 * @Version 1.0
 */
public class Providers {

    public static void main(String[] args) throws IOException, TimeoutException {
        //获取连接对象
        Connection connection = RabbitMqUtil.getConnection("192.168.43.78", 5672, "/ems", "ems", "123");
        //获取通道对象
        Channel channel = connection.createChannel();
        //通过通道声明交换机  参数1：交换机的名称 参数2：direct 路由模式
        channel.exchangeDeclare("logs_direct", "direct");
        //发送消息
        String routingkey = "error";
        channel.basicPublish("logs_direct", routingkey, null, ("这是direct模型发布基于route key：{" + routingkey + "}发送的消息").getBytes());

        //关闭资源
        RabbitMqUtil.close(connection, channel);

    }
}
